package doing.normal_001_100;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import static com.alibaba.fastjson.JSON.toJSONString;

/**
 * Leetcode-1
 * 计算两个数的和
 * <p>
 * Given nums = [2, 7, 11, 15], target = 9,
 * <p>
 * Because nums[0] + nums[1] = 2 + 7 = 9,
 * return [0, 1].
 *
 * @date 2019-3-17
 * 思路：
 * 先把参数、坐标扔到 map 里面，
 * 编译参数集合，并且拿预期结果 target 减去参数集合
 * 判断差值是否也在 map 中，如果存在直接记录并输出
 */
@Slf4j
public class TwoSum {

    @SuppressWarnings("all")
    public int[] twoSum(int[] nums, int target) {
        // 190317 第一次完成
        // 190504 看了答案想了一下 一遍过
        return null;
    }

    @Test
    public void test() {
        int[] sums = new int[]{2, 7, 11, 15};
        int target = 17;
        log.info(toJSONString(twoSum(sums, target)));
    }
}

























/*
@SuppressWarnings("all")
public static int[] twoSum(int[] nums, int target) {

    Map<Integer, Integer> m = new HashMap<Integer, Integer>();

    int[] res = new int[2];

    // NO.1 把输入源的所有 [值-坐标] 装入hashMap 中
    for (int i = 0; i < nums.length; ++i) {
        m.put(nums[i], i);
    }

    // NO.2 遍历输入源，通过期望结果来反推匹配的值
    for (int i = 0; i < nums.length; ++i) {

        // NO.3 如果计算期望值
        int t = target - nums[i];

        // NO.4 从hashMap中提取期望值，如果成功就放入结果
        if (m.containsKey(t) && m.get(t) != i) {
            // NO.5 装入结果集
            // 循环内的值
            res[0] = i;

            // 循环外的值
            res[1] = m.get(t);
            break;
        }
    }
    return res;
}
*/